package yunhe.dao;

import org.apache.ibatis.annotations.Param;
import yunhe.entity.Sale;
import yunhe.entity.SaleAppend;
import yunhe.entity.SalePack;

import java.util.Date;
import java.util.List;

public interface ISaleDao {

	/**
	 * 查询所有销售单
	 */
	List<Sale> saleList();
	/**
	 * 查询所有未执行销售单
	 */
	List<Sale> saleListUnExcute();

	/**
	 * 根据销售单编号查询销售单
	 */
	List<Sale> saleListBySalesId(String salesId);
	/**
	 * 根据销售单编号查询销售单及从表信息
	 */
	List<SaleAppend> saleListAndAppendAndProBySalesId(String salesId);
	/**
	 * 根据顾客查询销售单及从表信息
	 */
	List<SaleAppend> saleListAndAppendAndProByCusId(String cusId);

	/**
	 * 根据顾客id查询销售单
	 */
	List<Sale> saleListByCustomerId(String customerId);

	/**
	 * 根据销售日期查询销售单
	 */
	List<Sale> saleListBySaleDate(@Param("date1")Date date1,@Param("date2")Date date2);

	/**
	 * 根据经办人id查询销售单
	 */
	List<Sale> saleListByWorkId(String workId);

	/**
	 * 根据应收金额查询销售单
	 */
	List<Sale> saleListByAccountReceiving(double money);

	/**
	 * 根据实收金额查询销售单
	 */
	List<Sale> saleListByAccountReceived(double money);

	/**
	 * 根据执行状态查询销售单
	 */
	List<Sale> saleListByExcuteState(int state);

	/**
	 * 销售退货历史
	 */
	List<SaleAppend> saleBackHistory();
	/**
	 * 根据日期查询退货历史
	 */
	List<SaleAppend> saleBackHistoryByDate(@Param("date1")Date date1,@Param("date2")Date date2);

	/**
	 * 根据销售单编号改变执行状态
	 */
	int alterStateBySalesId(String salesId);
	/**
	 * 销售排行
	 */
	List<Sale> saleRank();

	/**
	 * 销售合同生成
	 */
	int salePackGenerate(SalePack salePack);
	/**
	 * 销售合同查询
	 */
	List<SalePack> salePackQuery();
	/**
	 * 根据日期查询销售合同
	 */
	List<SalePack> salePackQueryByDate(@Param("date1")Date date1,@Param("date2")Date date2);

	/**
	 * 销售录入
	 * 
	 * @param sale
	 * @return
	 */
	int saleIn(Sale sale);
	/**
	 * 销售从表录入
	 * 
	 * @param sale
	 * @return
	 */
	int saleAppendIn(SaleAppend saleAppend);

	/**
	 * 根据客户进行退货1
	 * 
	 * @param cusId
	 * @return
	 */
	int saleBackQuantityAlterByCus(String cusId);
	/**
	 * 根据客户进行退货2
	 *
	 * @param cusId
	 * @return
	 */
	int saleBackStateAlterByCus(String customerId);

}
